package in.lib.adapter; import in.lib.Constants; import in.lib.adapter.base.RobinAdapter; import in.lib.helper.AnimationHelper; import in.lib.holder.DraftPostHolder; import in.lib.manager.CacheManager; import in.lib.manager.SettingsManager; import in.lib.utils.Dimension; import in.model.DraftPost; import in.rob.client.R; import in.rob.client.dialog.NewPostDialog; import in.rob.client.dialog.base.DialogBuilder; import java.util.List; import lombok.Getter; import lombok.Setter; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class DraftAdapter extends RobinAdapter { protected final int TYPE_STANDARD = 0; @Getter private final Context context; @Getter private final Dimension dimension; @Getter private final LayoutInflater layoutInflater; @Getter @Setter private int lastPositionAnimated = 5; public DraftAdapter(Context context, List<DraftPost> items) { this(context, items, Order.DESC); } public DraftAdapter(Context context, List<DraftPost> items, Order order) { super(context, items); this.context = context; this.dimension = new Dimension(context); this.layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.setOrder(order); this.setItems(items); } @Override public View getView(int position, View convertView, ViewGroup parent) { DraftPost post = (DraftPost)getItem(position); DraftPostHolder currentHolder; if (convertView == null) { convertView = getLayoutInflater().inflate(R.layout.draft_post_list_item, parent, false); currentHolder = new DraftPostHolder(convertView); convertView.setTag(R.id.TAG_VIEW_HOLDER, currentHolder); currentHolder.editButton.setOnClickListener(this); currentHolder.duplicateButton.setOnClickListener(this); currentHolder.sendButton.setOnClickListener(this); currentHolder.deleteButton.setOnClickListener(this); } else { currentHolder = (DraftPostHolder)convertView.getTag(R.id.TAG_VIEW_HOLDER); } currentHolder.populate(post, this); currentHolder.media.setOnClickListener(this); currentHolder.media.setTag(position); currentHolder.editButton.setTag(position); currentHolder.duplicateButton.setTag(position); currentHolder.sendButton.setTag(position); currentHolder.deleteButton.setTag(position); /** * Set the animation if it hasn't been played */ if ((lastPositionAnimated >= 0 && lastPositionAnimated < position) && (isAnimationsEnabled() && SettingsManager.isListAnimationEnabled())) { AnimationHelper.slideUp(convertView); } if (position > lastPositionAnimated) { lastPositionAnimated = position; } super.getView(position, convertView, parent); return convertView; } @Override public void onClick(final View v) { if (v.getTag() == null) return; final DraftPost post = (DraftPost)getItem((Integer)v.getTag()); if (v.getId() == R.id.send) { Intent sendIntent = new Intent(getContext(), NewPostDialog.class); sendIntent.putExtra(Constants.EXTRA_NEW_POST_DRAFT, post.serialize()); sendIntent.putExtra(Constants.EXTRA_RESEND, true); getContext().startActivity(sendIntent); } else if (v.getId() == R.id.edit) { Intent editIntent = new Intent(getContext(), NewPostDialog.class); editIntent.putExtra(Constants.EXTRA_NEW_POST_DRAFT, post.serialize()); getContext().startActivity(editIntent); } else if (v.getId() == R.id.duplicate) { DraftPost duplicate = new DraftPost(); duplicate.setAnnotations(post.getAnnotations()); duplicate.setChannelId(post.getChannelId()); duplicate.setDate(System.currentTimeMillis()); duplicate.setImagePath(post.getImagePath()); duplicate.setPostText(post.getPostText()); duplicate.setReplyId(post.getReplyId()); duplicate.setSelectedAccountId(post.getSelectedAccountId()); prependItem(duplicate); notifyDataSetChanged(); CacheManager.getInstance().writeFile(String.format(Constants.CACHE_DRAFT_POST, duplicate.getSelectedAccountId(), duplicate.getDate()), duplicate); } else if (v.getId() == R.id.delete) { DialogBuilder.create(getContext()) .setTitle(R.string.confirm) .setMessage(R.string.confirm_delete) .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { removeItem(post); notifyDataSetChanged(); CacheManager.getInstance().removeFile(String.format(Constants.CACHE_DRAFT_POST, post.getSelectedAccountId(), post.getDate())); } }) .setNegativeButton(R.string.no, null) .show(); } } }